#ifndef _OD_SIP_GB28181_XML_CMD_DECINE_H_
#define _OD_SIP_GB28181_XML_CMD_DECINE_H_

#ifdef __cplusplus
extern "C" {
#endif

#include "od_trace.h"
#include "param_xml.h"

typedef struct
{
    char    CmdType[32];
}msg_CmdType;

typedef struct
{
    char    CmdType[32];
    char    SN[32];
    char    DeviceID[64];
    char    Status[32];
}msg_status;


/**@brief 设备信息查询请求*/
typedef struct
{
    char    CmdType[32];     /**< 必选*/
    char    SN[32];          /**< 必选*/
    char    DeviceID[64];    /**< 必选*/
}msg_DeviceInfo_rq;
    

/**@brief 设备信息查询应答*/
typedef struct 
{
    char    CmdType[32];     /**< 必选*/
    char    SN[32];          /**< 必选*/
    char    DeviceID[64];    /**< 必选*/
    char    DeviceName[64];  /**< 可选*/
    char    Result[32];      /**< 必选*/
    char    Manufacturer[64];/**< 可选*/ 
    char    Model[32];       /**< 可选*/
    char    Firmware[32];    /**< 可选*/
    int     Channel;         /**< 可选*/
    char    Info[1024];      /**< 可选。扩展信息*/
}msg_DeviceInfo_rp;


/**@brief 设备目录查询请求*/
typedef struct
{
    char    CmdType[32];     /**< 必选*/
    char    SN[32];          /**< 必选*/
    char    DeviceID[64];    /**< 必选*/
    char    StartTime[64];   /**< 可选*/
    char    EndTime[64];     /**< 可选*/
}msg_Catalog_rq;


/**@brief 设备目录查询应答*/
typedef struct
{
    char    CmdType[32];     /**< 必选*/
    char    SN[32];          /**< 必选*/
    char    DeviceID[64];    /**< 必选*/
    int     SumNum;          /**< 必选*/
}msg_Catalog_rp;


/**@brief 设备目录查询应答 item信息*/
typedef struct
{
    char    DeviceID[64];        /**< 必选, 设备/区域/系统编码*/
    char    Name[64];            /**< 必选, 设备/区域/系统名称*/
    char    Manufacturer[64];    /**< 必选, 设备厂商*/
    char    Model[64];           /**< 必选，设备型号*/
    char    Owner[64];           /**< 必选，设备归属*/
    char    CivilCode[64];       /**< 必选，行政区域*/
    char    Block[64];           /**< 可选，警区*/
    char    Address[64];         /**< 必选，安装地址*/
    int     Parental;            /**< 必选，是否有子设备 1有，0没有*/
    char    ParentID[64];        /**< 必选，父设备/区域/系统ID*/
    int     SafetyWay;           /**< 可选，信令安全模式(可选)缺省为0; 0:不采用;2:S/MIME 签名方式;3:S/MIME加密签名同时采用方式;4:数字摘要方式*/
    int     RegisterWay;         /**< 必选，注册方式(必选)缺省为1; 1: 符合IETFRFC3261标准的认证注册模式;2: 基于口令的双向认证注册模式;3: 基于数字证书的双向认证注册模式*/
    char    CertNum[64];         /**< 证书序列号(有证书的设备必选)*/
    int     Certifiable;         /**< 证书有效标识(有证书的设备必选)缺省为0;证书有效标识: 0:无效 1:有效*/
    int     ErrCode;             /**< 无效原因码(有证书且证书无效的设备必选)*/
    char    EndTime[64];         /**< 证书终止有效期(有证书的设备必选)*/
    int     Secrecy;             /**< 保密属性(必选)缺省为0;0:不涉密,1:涉密*/
    char    IPAddress[64];       /**< 设备/区域/系统IP地址(可选)*/
    int     Port;                /**< 设备/区域/系统端口(可选)*/
    char    Password[64];        /**< 设备口令(可选)*/
    int     Status;              /**< 设备状态(必选)*/
    char    Longitude[64];       /**< 经度(可选)*/
    char    Latitude[64];        /**< 纬度(可选)*/
}msg_Catalog_item;


/**@brief 设备状态查询请求*/
typedef struct
{
    char    CmdType[32];     /**< 必选*/
    char    SN[32];          /**< 必选*/
    char    DeviceID[64];    /**< 必选*/
}msg_DeviceStatus_rq;


/**@brief 设备状态信息查询应答*/
typedef struct 
{
    char    CmdType[32];     /**< 必选*/
    char    SN[32];          /**< 必选*/
    char    DeviceID[64];    /**< 必选*/
    char    Result[32];      /**< 可选*/
    char    Online[32];      /**< 必选。ONLINE or    OFFLINE*/
    char    Status[32];      /**< 必选*/
    char    Reason[32];      /**< 可选*/
    char    Encode[32];      /**< 可选。是否编码*/
    char    Record[32];      /**< 可选。是否录像*/
    char    DeviceTime[32];  /**< 可选。设备时间和日期*/
    char    Alarmstatus[32]; /**< 可选。报警设备状态列表*/
    int     num;             /**< 可选*/
    char    Info[1024];      /**< 可选。扩展信息*/
}msg_DeviceStatus_rp;


/**@brief 报警状态列表Item*/
typedef struct
{
    char DeviceID[64];       /**< 必选。报警设备编码*/
    char DutyStatus[32];     /**< 必选。报警设备状态*/
}msg_DeviceStatus_Item;


/**@brief 设备配置查询*/
typedef struct
{
    char    CmdType[32];     /**< 必选*/
    char    SN[32];          /**< 必选*/
    char    DeviceID[64];    /**< 必选*/
    char    ConfigType[32];  /**< 必选*/
}msg_ConfigDownload_rq;

/**@brief 设备配置应答-BasicParam*/
typedef struct
{
    char    Name[32];            /**< 必选*/
    char    Expiration[32];      /**< 必选*/
    int     HeartBeatInterval;   /**< 必选*/
    int     HeartBeatCount;      /**< 必选*/
    int     PositionCapability;  /**< 可选。定位功能支持情况，0-不支持，1-支持GPS定位；2-支持北斗定位*/
    char    Longitude[32];       /**< 可选。经度*/
    char    Latitude[32];        /**< 可选。纬度*/
}msg_ConfigDownload_BasicParam_rp;


/**@brief 设备配置应答-VideoParamOpt*/
typedef struct
{
    char    DownloadSpeed[32]; 
    char    Resolution[32];
}msg_ConfigDownload_VideoParamOpt_rp;


/**@brief 设备配置应答*/
typedef struct
{
    char    CmdType[32];     /**< 必选*/
    char    SN[32];          /**< 必选*/
    char    DeviceID[64];    /**< 必选*/
    char    Result[8];       /**< 必选*/
    msg_ConfigDownload_BasicParam_rp BasicParam;       /**< 可选*/
    msg_ConfigDownload_VideoParamOpt_rp VideoParamOpt; /**< 可选*/
}msg_ConfigDownload_rp;

/**@brief 设备配置应答-SVACEncodeConfig  */
// TODO

/**@brief 设备配置应答-SVCParam  */
// TODO

/**@brief 设备配置应答-SurveillanceParam  */
// TODO


/**@brief 设备控制应答*/
typedef struct
{
    char    CmdType[32];     /**< 必选*/
    char    SN[32];          /**< 必选*/
    char    DeviceID[64];    /**< 必选*/
    char    Result[8];       /**< 必选*/
}msg_DeviceControl_rp;



/**@brief 设备控制-强制关键帧*/
typedef struct
{
    char    CmdType[32];     /**< 必选*/
    char    IFameCmd[32];    /**< 必选*/
    char    SN[32];          /**< 必选*/
    char    DeviceID[64];    /**< 必选*/
}msg_IFameCmd;


/**@brief 设备控制-强制关键帧*/
typedef struct
{
    int ControlPriority;
}msg_PTZCmd_info;
typedef struct
{
    char    CmdType[32];     /**< 必选*/
    char    SN[32];          /**< 必选*/
    char    DeviceID[64];    /**< 必选*/
    char    PTZCmd[32];      /**< 必选*/
    msg_PTZCmd_info Info;
}msg_PTZCmd;



extern struct pdesc msg_status_params[5];
extern struct pdesc msg_cmdtype[2];
extern struct pdesc msg_deviceinfo_rq[4];
extern struct pdesc msg_deviceinfo_rp[11];
extern struct pdesc msg_catalog_rq[6];
extern struct pdesc msg_catalog_rp[5];
extern struct pdesc msg_devicestatus_rq[4];
extern struct pdesc msg_devicestatus_rp[14];
extern struct pdesc msg_configdownload_rq[5];
extern struct pdesc msg_configdownload_rp[7];
extern struct pdesc msg_devicecontrol_rp[5];
extern struct pdesc msg_IFameCmd_rq[5];
extern struct pdesc msg_PTZCmd_rq[6];


#ifdef __cplusplus
    }
#endif

#endif

/*_*/


